//************************************************************
//    > File Name: remove-element.cpp
//    > Author: davis
//    > Mail:  
//    > Created Time: 2017年03月22日 13:54:13
//***********************************************************
//lintcode #172
#include<bits/stdc++.h>
#include<vector>
#include<iostream>
using namespace std;
int removeElement(vector<int> &A,int elem){
	int left=0;
	int right=A.size();
	while(left<right){
		if(A[left]!=elem)
			++left;
		else
			swap(A[left],A[--right]);
	}
	A.erase(A.begin()+left,A.end());
	//return left;
	return A.size();
}
int removeElement2(vector<int> &A,int elem){
	vector<int>::iterator last,cur;
	for(last=cur=A.begin();cur!=A.end();++cur){
		if(*cur != elem){
			*last = *cur;
			++last;
		}
	}
	A.erase(last,cur);
	return A.size();
}
int main(){
	vector<int> a={
		0,4,4,0,0,2,4,4
	};
//	int r=removeElement(a,4);
	int r=removeElement2(a,4);
	cout<<r<<endl;
	for(int i=0;i<a.size();++i)
		cout<<a[i]<<" ";
	cout<<endl;
}
